import {defineConfig, loadEnv} from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import VueDevTools from 'vite-plugin-vue-devtools';
import {createSvgIconsPlugin} from 'vite-plugin-svg-icons';
import {fileURLToPath, URL} from 'node:url';
import path from 'path';
import {viteMockServe} from 'vite-plugin-mock';
import Components from 'unplugin-vue-components/vite';
import {AntDesignVueResolver} from 'unplugin-vue-components/resolvers';
// https://vitejs.dev/config/

export default defineConfig(({mode, command}) => {
  // 获取当前工作目录
  const root = process.cwd();
  // 获取环境变量
  const env = loadEnv(mode, root);
  const {VITE_APP_ENV, VITE_PORT, VITE_APP_BASE_URL, VITE_APP_MOCK_BASE_URL} = env;
  return {
    root, // 项目根目录
    base: './', // 项目部署的基础路径
    publicDir: fileURLToPath(new URL('./public', import.meta.url)), // 无需处理的静态资源位置
    assetsInclude: fileURLToPath(new URL('./src/assets', import.meta.url)), // 需要处理的静态资源位置
    plugins: [
      vue(), // vue 模版文件编译插件
      vueJsx(), // jsx 文件编译插件
      VueDevTools(),
      // 开启mock服务器
      viteMockServe({
        // 如果接口为 /mock/xxx 以 mock 开头就会被拦截响应配置的内容
        mockPath: 'mock', // 数据模拟需要拦截的请求起始 URL
        enable: true, // 本地环境是否开启 mock 功能
      }),
      // svg图标配置项
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), 'src/assets/svg-icon')],
        // 指定symbolId格式
        symbolId: 'icon-[dir]-[name]',
      }),

      Components({
        resolvers: [
          // 自动导入 AntDesignVue
          AntDesignVueResolver({
            importStyle: false, // css in js
          }),
        ],
        dts: fileURLToPath(new URL('./types/antd-components.d.ts', import.meta.url)),
      }),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        '#': fileURLToPath(new URL('./types', import.meta.url)),
      },
    },
    // 打包配置
    build: {
      // 关闭 sorcemap 报错不会映射到源码
      sourcemap: false,
    },
    // 运行后本地预览的服务器
    server: {
      // https: false, // 是否开启 https
      port: Number(VITE_PORT), // 开发环境预览服务器端口
      host: '0.0.0.0', // 指定服务器应该监听哪个 IP 地址。 如果将此设置为 0.0.0.0 或者 true 将监听所有地址，包括局域网和公网地址。
      open: false, // 启动后是否自动打开浏览器
      cors: true, // 是否开启CORS跨域
      // 帮助我们开发时解决跨域问题
      proxy: {
        // 这里的意思是 以/api开头发送的请求都会被转发到 http://xxx:9000
        [VITE_APP_BASE_URL]: {
          target: 'http://localhost:9000',
          // 改变 Host Header
          changeOrigin: true,
          // 发起请求时将 '/api' 替换为 ''
          //rewrite: (path) => path.replace(/^\/api/, ""),
        },
        [VITE_APP_MOCK_BASE_URL]: {
          target: 'http://localhost:9000',
          // 改变 Host Header
          changeOrigin: true,
          // 发起请求时将 '/api' 替换为 ''
          //rewrite: (path) => path.replace(/^\/api/, ""),
        },
      },

      // proxy: {
      //   // 这里的意思是 以/api开头发送的请求都会被转发到 http://xxx:7001
      //   '/dev-api': {
      //     target: 'http://localhost:7001',
      //     // 改变 Host Header
      //     changeOrigin: true,
      //     // 发起请求时将 '/api' 替换为 ''
      //     rewrite: (path) => path.replace(/^\/dev-api/, ''),
      //   },
      // },
    },
  };
});
